
/**************************************************************
 * 
 * Copyright ? 2012，北京福富软件技术股份有限公司
 * All Rights Reserved.
 * ------------------------------------------------------------
 * 文件名称：Debug.java
 * 文件摘要：控制控制台输出及日志输出
 * 初始版本：V1.0.0
 * 初始作者：Linz
 * 完成日期：2012-02
 * 
 **************************************************************/
package com.util;

import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Properties;


/**************************************************************************
 * 
 * 类名：Debug<br>
 * <br>
 * 功能：替代JDK中的控制台输出方法，调试时将Console可设为true，发布时可将flag设为false<br>
 * <br>
 * 作者：Linz 2012-02<br>
 * <br>
 * 属性列表：<br>
 * 		private static boolean Console<br>
 * <br>
 * 方法列表：<br>
 * 		public static void println()<br>
 * 		public static void println(boolean boolValue)<br>
 * 		...<br>
 * 		public static void log(String logStr, String logPath)<br>
 * 		public static void log(Object logObj, String logPath)<br>
 * 		...<br>
 * <br>
 * 修改记录：<br>
 * 		日期				修改人			修改说明<br>
 * 
 **************************************************************************/
public class Debug 
{
	public static Boolean Console = Boolean.valueOf(getFileIO("debugFlag","config.properties"));     
     
	
	public static void println() 
	{
		if (Console) 
		{
			System.out.println();
		}
	}
	
	public static void println(boolean boolValue) 
	{
		if (Console) 
		{
			System.out.println(DateUtil.DateToFullString(new Date())+"->"+boolValue);
		}
	}
	
	public static void println(char charValue) {
		if (Console) 
		{
			System.out.println(DateUtil.DateToFullString(new Date())+"->"+charValue);
		}
	}
	
	public static void println(int intValue) 
	{
		if (Console) 
		{
			System.out.println(DateUtil.DateToFullString(new Date())+"->"+intValue);
		}
	}
	
	public static void println(float floatValue) 
	{
		if (Console) 
		{
			System.out.println(DateUtil.DateToFullString(new Date())+"->"+floatValue);
		}
	}
	
	public static void println(double doubleValue) 
	{
		if (Console) 
		{
			System.out.println(DateUtil.DateToFullString(new Date())+"->"+doubleValue);
		}
	}
	
	public static void println(long longValue) 
	{
		if (Console) 
		{
			System.out.println(DateUtil.DateToFullString(new Date())+"->"+longValue);
		}
	}
	
	public static void println(String strValue) 
	{
		Console = Boolean.valueOf(getFileIO("debugFlag","config.properties"));     
		if (Console) 
		{
			System.out.println(DateUtil.DateToFullString(new Date())+"->"+strValue);
		}
	}
	
	public static void println(Object objValue) 
	{
		if (Console && objValue!=null) 
		{
			System.out.println(DateUtil.DateToFullString(new Date())+"->"+objValue.toString());
		}
	}
	
	public static void println(Exception e) 
	{
		if (Console && e!=null) 
		{
			System.out.println(DateUtil.DateToFullString(new Date())+"->"+e.getMessage());
		}
	}
	
	
	/**************************************************************************
	 * 
	 * 函数名：public static void log(String logStr, String logPath) throws Exception<br>
	 * <br>
	 * 功能：将字符串写入指写的文件日志中<br>
	 * <br>
	 * 作者：Linz 2009-11-23<br>
	 * <br>
	 * 参数表：<br>
	 * 		String logStr  -> 日志字符串<br>
	 * 		String logPath -> 日志路径<br>
	 * <br>
	 * 返回值：<br>
	 * 		无<br>
	 * <br>
	 * 修改记录：<br>
	 * 		日期				修改人			修改说明<br>
	 * 
	 **************************************************************************/
	public static void log(String logStr, String logPath) throws Exception
	{
		FileWriter     fw = null;
		BufferedWriter bw = null;
		try 
		{
			fw = new FileWriter(logPath, true);
			bw = new BufferedWriter(fw);
			bw.write(DateUtil.DateToFullString(new Date()));
			bw.newLine();
			bw.write(logStr);
			bw.newLine();
			bw.flush();
		}
		catch (Exception e) 
		{
			throw new Exception("写入日志错误");
		}
		finally 
		{
			if (bw!=null) bw.close();
			if (fw!=null) fw.close();
		}
	}
	
	
	/**************************************************************************
	 * 
	 * 函数名：public static void log(Object logObj, String logPath) throws Exception	<br>
	 * <br>
	 * 功能：将对象写入指写的文件日志中<br>
	 * <br>
	 * 作者：Linz 2009-05-21<br>
	 * <br>
	 * 参数表：<br>
	 * 		Object logObj -> 对象<br>
	 * <br>
	 * 返回值：<br>
	 * 		无<br>
	 * <br>
	 * 修改记录：<br>
	 * 		日期				修改人			修改说明<br>
	 * 
	 **************************************************************************/
	public static void log(Object logObj, String logPath) throws Exception	
	{
		if (logObj==null) { return; }
		log(logObj.toString(), logPath);
	}
	
	
	/**************************************************************************
	 * 
	 * 函数名：public static void log(Exception logExp, String logPath) throws Exception<br>
	 * <br>
	 * 功能：将异常写入指写的文件日志中<br>
	 * <br>
	 * 作者：Linz 2009-11-23<br>
	 * <br>
	 * 参数表：<br>
	 * 		Exception logExp  -> 异常对象<br>
	 * 		String    logPath -> 日志路径<br>
	 * <br>
	 * 返回值：<br>
	 * 		无<br>
	 * <br>
	 * 修改记录：<br>
	 * 		日期				修改人			修改说明<br>
	 * 
	 **************************************************************************/
	public static void log(Exception logExp, String logPath) throws Exception
	{
		FileWriter  fw = null;
		PrintWriter pw = null;
		try 
		{
			fw = new FileWriter(logPath, true);
			pw = new PrintWriter(fw);
			logExp.printStackTrace(pw);
			pw.flush();
		}
		catch (Exception e) 
		{
			throw new Exception("写入日志错误");
		}
		finally 
		{
			if (pw!=null) pw.close();
			if (fw!=null) fw.close();
		}
	}
	


/*
 * 
 * 读取修改配置文件
 * 
 */
public static String getFileIO(String name,String fileURL){   
	ClassLoader cl = Thread.currentThread().getContextClassLoader();
	String path    = cl.getResource("").getPath();
	String filePath = path+"../";  
	String p = filePath+ fileURL;
	Properties prop = new Properties();
	InputStream is = null;     
         try {   
        	is = new FileInputStream(p);
            prop.load(is);   
            return prop.getProperty(name);   
        } catch (IOException e) {   
            e.printStackTrace();   
        }finally{   
            try {   
                is.close();   
            } catch (IOException e) {   
            	
               e.printStackTrace();   
            }   
        }   
        return null;   
    }   
    public static void writeData(String key, String value,String fileURL) {   
    	ClassLoader cl = Thread.currentThread().getContextClassLoader();
    	String path    = cl.getResource("").getPath();
    	String filePath = path+"../";  
    	String p = filePath+ fileURL;
    	Properties prop = new Properties();   
    	InputStream is = null; 
        OutputStream fos = null;   
        try {   
         
            is = new FileInputStream(p);   
            prop.load(is);   
            is.close();//一定要在修改值之前关闭fis   
            fos = new FileOutputStream(p);   
            prop.setProperty(key, value);   
            prop.store(fos, "");   
          //  prop.store(fos, "Update '" + key + "' value");   
            fos.close();   
               
        } catch (IOException e) {   
            System.err.println("Visit " + fileURL + " for updating "  
            + value + " value error");   
        }  
        finally{   
            try {   
                fos.close();   
                is.close();   
            } catch (IOException e) {   
                // TODO Auto-generated catch block   
                e.printStackTrace();   
            }   
        }   
    }   
}